import router from '@/router';

/**
 * 检查token是否存在
 * @returns {boolean} token是否存在
 */
export function checkToken() {
  const token = localStorage.getItem('token');
  return !!token;
}

/**
 * 获取token
 * @returns {string|null} token值
 */
export function getToken() {
  return localStorage.getItem('token');
}

/**
 * 清除用户信息
 */
export function clearUserInfo() {
  localStorage.removeItem('token');
  localStorage.removeItem('user');
  localStorage.removeItem('isLoggedIn');
}

/**
 * 处理token过期或无效的情况
 */
export function handleTokenExpired() {
  clearUserInfo();
  router.push('/');
}

/**
 * 检查API响应中的token状态
 * @param {Object} response - API响应对象
 * @returns {boolean} 是否需要处理token过期
 */
export function checkTokenFromResponse(response) {
  if (response && response.data && response.data.code === 401) {
    return true;
  }
  return false;
}

/**
 * 检查错误响应中的token状态
 * @param {Object} error - 错误对象
 * @returns {boolean} 是否需要处理token过期
 */
export function checkTokenFromError(error) {
  if (error && error.response && error.response.status === 401) {
    return true;
  }
  return false;
}

/**
 * 统一的token验证和错误处理
 * @param {Function} apiCall - API调用函数
 * @param {Function} onSuccess - 成功回调
 * @param {Function} onError - 错误回调
 * @param {Function} onTokenExpired - Token过期回调
 */
export async function handleApiCall(apiCall, onSuccess, onError, onTokenExpired) {
  // 检查token是否存在
  if (!checkToken()) {
    handleTokenExpired();
    return;
  }

  try {
    const response = await apiCall();
    
    if (checkTokenFromResponse(response)) {
      // Token过期
      if (onTokenExpired) {
        onTokenExpired();
      } else {
        handleTokenExpired();
      }
      return;
    }
    
    if (onSuccess) {
      onSuccess(response);
    }
  } catch (error) {
    if (checkTokenFromError(error)) {
      // Token过期
      if (onTokenExpired) {
        onTokenExpired();
      } else {
        handleTokenExpired();
      }
      return;
    }
    
    if (onError) {
      onError(error);
    }
  }
} 